#include "Int_I2c.h"
#include "STRING.H"

/**
 * @brief 开始信号
 *
 */
void Int_I2c_Start()
{
    // 默认拉高
    SCL = 1;
    SDA = 1;

    SDA = 0;
    SCL = 0;
}

/**
 * @brief 发送数据
 *
 * @param t_data 发送数据
 */
void Int_I2c_Transmit(u8 t_data)
{
    u8 i;
    u8 compare = 0X80;
    for (i = 0; i < 8; i++) {

        if ((t_data & compare) == 0) {
            SDA = 0;
        } else {
            SDA = 1;
        }
        
        SCL = 1;
        SCL = 0;
        compare >>= 1;
    }
}

/**
 * @brief 发送应答数据
 *
 */
void Int_I2c_Transmit_Ack(bit ask)
{
    SDA = ask;
    SCL = 1;
    SCL = 0;
}

/**
 * @brief 接收数据
 *
 * @param t_data 接收数据
 */
u8 Int_I2c_Reception()
{
    u8 req_data = 0X00;
    u8 i;

    SDA = 1;
    // 释放数据线
    for (i = 0; i < 8; i++) {
        SCL = 1;
        req_data <<= 1;
        req_data |= SDA;
        SCL = 0;
    }

    return req_data;
}

/**
 * @brief 接收应答数据
 *
 * @return bit
 */
bit Int_I2c_Reception_Ack()
{
    bit ask;
    SDA = 1;

    SCL = 1;
    ask = SDA;
    SCL = 0;

    return ask;
}

/**
 * @brief 结束信号
 *
 */
void Int_I2c_Stop()
{
    // 默认拉低
    SDA = 0;

    // 发送上升沿
    SCL = 1;
    SDA = 1;
}

/**
 * 写入字符串数据
 */
bit Int_I2c_Transmit_Str(u8 *str_data)
{
    u8 str_lenth = strlen(str_data);
    u8 i;
    bit ask;

    Int_I2c_Start();

    for (i = 0; i < str_lenth; i++) {
        // 发生数据
        Int_I2c_Transmit(str_data[i]);
        // 接收应答
        ask |= Int_I2c_Reception_Ack();
    }

    Int_I2c_Stop();
    return ask;
}